﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Utils;

namespace Logic
{
    public class Materias
    {
        private Data.Materias _hnd_maerias = new Data.Materias();
        private Data.Planes _hnd_planes = new Data.Planes();

        private Data.Materias HndMaterias
        {
            get { return _hnd_maerias; }
        }
        private Data.Planes HndPlanes
        {
            get { return _hnd_planes; }
        }

        public Entities.Materia GetByID(int id)
        {
            return HndMaterias.GetByID(id);
        }

        public Entities.Collections.MateriasCollection GetByPlan(Entities.Plan plan)
        {
            return HndMaterias.GetByPlan(plan);
        }

        public Entities.Collections.MateriasCollection GetCollection()
        {
            return HndMaterias.GetCollection();
        }

        private string Validate(Entities.Materia instance)
        {
            StringBuilder b = new StringBuilder();

            if (instance.Nombre.Trim().IsEmptyString()) b.AppendLine("* No ingresó el nombre de la materia");
            else if (!instance.Nombre.Trim().IsLengthBetween(1, 255)) b.AppendLine("* El nombre de la materia debe tener entre 1 y 255 caracteres");
            if (instance.HorasSemanales <= 0) b.AppendLine("* No ingresó la cantidad de horas semanales de la materia");
            if (instance.HorasTotales <= 0) b.AppendLine("* No ingresó la cantidad de horas totales de la materia");
            else if (instance.HorasSemanales > instance.HorasTotales) b.AppendLine("* La cantidad de horas semanales no puede ser superior a la cantidad de horas totales");
            else if ((instance.HorasTotales % instance.HorasSemanales) != 0) b.AppendLine("* La cantidad de horas totales debe ser un un múltiplo de la cantidad de horas totales");
            if (HndPlanes.GetByID(instance.IDPlan) == null) b.AppendLine("* La materia no tiene un plan asociado");

            return b.ToString();
        }

        public string Save(Entities.Materia instance)
        {
            string r = Validate(instance);

            if (r.IsEmptyString())
            {
                instance.Nombre = instance.Nombre.Trim();
                HndMaterias.Save(instance);
            }

            return r;
        }

        public void Delete(Entities.Materia instance)
        {
            HndMaterias.Delete(instance);
        }
    }
}
